<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        function myTrim(str) {
            //如果是null或者undefind直接返回空字符串
            if (!str) {
                return ''
            } else {
                return str.trim()
            }
        }
        // console.log(myTrim(null));
        // console.log(myTrim('  11111   '));
        // let str ='       z  z z   '
        // console.log(str.trim()); //去除字符串前后空格
        // console.log(str); //去除字符串前后空格

        let game = {
            //敏感词数组
            sensitiveWord: ['CNM', 'QNM', 'NMSL'],
            //使用数组模拟用户数据库
            userList: [],
            //登录页
            showLoginPage() {
                console.log('欢迎登录');
                let userNameIsOk = true, passwordIsOk = true
                let password = '', userName = ''

                do {
                    userName = prompt('请输入用户名：')
                    if (!userName) {
                        userNameIsOk = false
                        console.log('用户名不能为空');
                    } else {
                        userNameIsOk = true
                    }
                } while (!userNameIsOk);

                do {
                    password = prompt('请输入密码：')
                    if (!password) {
                        passwordIsOk = false
                        console.log('密码不能为空');
                    } else if (password.length < 6) {
                        passwordIsOk = false
                        console.log('密码至少大于6位');
                    } else {
                        passwordIsOk = true
                    }
                } while (!passwordIsOk);

                //拿用户输入的用户名和密码，判断是否存在
                let user = this.userList.find(function (item) {
                    return item.userName === userName
                })

                if (!user) {
                    console.log('此用户不存在！');
                    this.showLoginPage()
                } else {
                    //用户存在，则判断密码对不对
                    if (user.password !== password) {
                        console.log('密码错误');
                        //有错则再次输入
                        this.showLoginPage()
                    } else {
                        //找到用户，登录成功
                        console.log('login success');
                        this.showMainPage()
                    }
                }

            },

            showMainPage() {
                console.log('这里是游戏主界面');
            },

            //注册页
            showRegisterPage() {
                console.log('欢迎注册');
                //定义状态，代表用户名和密码验证是否通过
                let userNameIsOk = true, passwordIsOk = true, cPasswordIsOk = true
                //在外面定义userName和password，便于后续使用
                let password = '', userName = ''
                //因为当前场景需要先执行后判断，所以采用do-while
                do {
                    userName = myTrim(prompt('请输入用户名：'))

                    //如果去完空格是空字符串，则提示，设置验证为不通过
                    if (!userName) {
                        userNameIsOk = false
                        console.log('用户名不能为空');
                    } else {
                        //通过some方法检查用户名是否包含敏感词，
                        let isSensitive = this.sensitiveWord.some(function (item) {
                            //统一设置为大写再比对，以此忽略大小写
                            return userName.toUpperCase().includes(item.toUpperCase())
                        })

                        if (isSensitive) {
                            userNameIsOk = false
                            console.log('用户名不合法');
                        } else {

                            //判断用户数组中是否已存在同样的用户名
                            let isRepeat = this.userList.some(function (item) {
                                return item.userName === userName
                            })

                            if (isRepeat) {
                                userNameIsOk = false
                                console.log('用户名已存在');
                            } else {
                                userNameIsOk = true
                            }


                        }
                    }
                } while (!userNameIsOk);//不管是因为什么而验证不通过，就继续循环要求重新输入

                do {
                    password = myTrim(prompt('请输入密码：'))

                    if (!password) {
                        passwordIsOk = false
                        console.log('密码不能为空');
                    } else if (password.length < 6) {
                        passwordIsOk = false
                        console.log('密码至少大于6位');
                    } else {
                        passwordIsOk = true
                    }
                } while (!passwordIsOk);

                do {
                    let passwordConfirm = myTrim(prompt('请输入确认密码：'))//将字符串左右去除空格

                    if (passwordConfirm !== password) {
                        console.log('两次密码输入不一致');
                        cPasswordIsOk = false
                    } else {
                        cPasswordIsOk = true
                    }
                } while (!cPasswordIsOk);

                //往用户数组中添加一条用户数据
                let newUser = {
                    userName,
                    password
                }
                this.userList.push(newUser)
                console.log('当前用户：', this.userList);
                //注册完成，回到欢迎页
                this.showWelComePage()

            },
            //欢迎页
            showWelComePage() {
                let type = prompt('欢迎来到宠物世界，请选择操作：1.登录  2.注册  3.退出')
                switch (type) {
                    case '1':
                        this.showLoginPage()
                        break;
                    case '2':
                        this.showRegisterPage()
                        break;
                    case '3':
                        console.log('退出成功，欢迎再来');
                        break;
                    default:
                        console.log('输入有误，请重新操作');
                        // arguments.callee()//指向本函数，与函数名无关
                        this.showWelComePage()
                        break;
                }
            }
        }

        //页面初始显示欢迎页
        game.showWelComePage()

        //  call/apply/bind

    </script>
</body>

</html>